package com.neusoft.EYSystem.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.neusoft.EYSystem.dao.NursingLevelDAO;
import com.neusoft.EYSystem.po.NursingLevel;
import com.neusoft.EYSystem.po.PageResponseBean;
import com.neusoft.EYSystem.po.ResponseBean;
import com.neusoft.EYSystem.service.NursingLevelService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class NursingLevelServiceImpl implements NursingLevelService {
    // ✅ 工具方法：判断是否为合法字符串（排除 null、空串、"null"）
    private boolean isValid(String value) {
        return value != null && !value.trim().isEmpty() && !"null".equalsIgnoreCase(value.trim());
    }

    @Autowired
    private NursingLevelDAO nursingLevelDAO;

    @Override
    public Integer deleteStatusById(NursingLevel nursingLevel) {
        UpdateWrapper<NursingLevel> uw = new UpdateWrapper<>();
        uw.eq("level_id", nursingLevel.getLevelId());
        nursingLevel.setStatus("0"); // 假设 status 字段为 String 类型，表示删除状态
        return nursingLevelDAO.update(nursingLevel, uw);
    }

    @Override
    public PageResponseBean<List<NursingLevel>> pageNursingLevel(Long cur, Long number, NursingLevel nursingLevel) {
        // 1. 创建分页对象（第cur页，每页number条记录）
        IPage<NursingLevel> page = new Page<>(cur, number);

        // 2. 构造查询条件的包装器，用于动态拼接SQL中的WHERE子句
        QueryWrapper<NursingLevel> wrapper = new QueryWrapper<>();

        // 3. 设置标志变量，判断是否已经添加过查询条件（用于处理 OR 的拼接逻辑）
        boolean hasCondition = false;

        // 4. 判断是否传入 projectId（主键），若传入则进行模糊匹配（⚠️建议改为 eq 精确匹配）
        if (nursingLevel.getLevelId() != null) {
            wrapper.eq("level_id", nursingLevel.getLevelId()); // ⚠️ projectId为Integer类型，数据库中字段是否为 "project_id"？
            hasCondition = true;
        }

        // 5. 判断是否传入 name 字段，进行模糊匹配 name LIKE '%xxx%'
        if (isValid(nursingLevel.getLevelName())) {
            if (hasCondition) {
                wrapper.like("level_name", nursingLevel.getLevelName()); // 若已有条件，则使用 OR name LIKE
            } else {
                wrapper.like("level_name", nursingLevel.getLevelName()); // 否则直接使用 name LIKE
                hasCondition = true;
            }
        }

        // 6. 判断是否传入 status 字段，进行模糊匹配 status LIKE '%yyy%'
        if (isValid(nursingLevel.getStatus())) {
            if (hasCondition) {
                wrapper.like("status", nursingLevel.getStatus()); // 若已有条件，使用 OR status LIKE
            } else {
                wrapper.like("status", nursingLevel.getStatus()); // 否则直接使用 status LIKE
                hasCondition = true;
            }
        }

        IPage<NursingLevel> result = nursingLevelDAO.selectPage(page, wrapper);

        // 8. 获取分页结果的数据列表和总条数
        List<NursingLevel> list = result.getRecords();
        long total = result.getTotal();
        // 9. 封装并返回统一的响应对象 PageResponseBean
        PageResponseBean<List<NursingLevel>> rb = new PageResponseBean<>(list); // 查询成功
        rb.setTotal(total);


        return rb;
    }
}
